package pe.gob.mef.snip.preinversion.controller;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.gob.mef.snip.preinversion.domain.Alternativa;
import pe.gob.mef.snip.preinversion.domain.Conglomerado;
import pe.gob.mef.snip.preinversion.domain.FuncionOdi;
import pe.gob.mef.snip.preinversion.domain.Localizacion;
import pe.gob.mef.snip.preinversion.domain.ProgramaOdi;
import pe.gob.mef.snip.preinversion.domain.ProyectoBanco;
import pe.gob.mef.snip.preinversion.domain.SubprogramaOdi;
import pe.gob.mef.snip.preinversion.domain.TakeaNumber;
import pe.gob.mef.snip.preinversion.domain.UnidadOdi;
import pe.gob.mef.snip.preinversion.service.AlternativaService;
import pe.gob.mef.snip.preinversion.service.ConglomeradoService;
import pe.gob.mef.snip.preinversion.service.FuncionOdiService;
import pe.gob.mef.snip.preinversion.service.LocalizacionService;
import pe.gob.mef.snip.preinversion.service.ProgramaOdiService;
import pe.gob.mef.snip.preinversion.service.ProyectoBancoService;
import pe.gob.mef.snip.preinversion.service.SubprogramaOdiService;
import pe.gob.mef.snip.preinversion.service.TakeaNumberService;
import pe.gob.mef.snip.preinversion.service.UnidadOdiService;
import pe.gob.mef.snip.preinversion.util.Parametros;
import pe.gob.mef.snip.preinversion.util.ServiceException;

@Controller
public class AspectosGeneralesController {

	protected final Log log = LogFactory.getLog(getClass());
	
	@Autowired
	private FuncionOdiService funcionOdiService;	
	@Autowired	
	private TakeaNumberService takeaNumberService;	
	@Autowired	
	private ProgramaOdiService programaOdiService;	
	@Autowired	
	private SubprogramaOdiService subprogramaOdiService;	
	@Autowired	
	private UnidadOdiService unidadOdiService;	
	@Autowired	
	private ConglomeradoService conglomeradoService;

	
	@Autowired	
	private ProyectoBancoService proyectoBancoService;
	@Autowired	
	private LocalizacionService localizacionService;
	
	
	private FuncionOdi funcionOdi;
	private ProgramaOdi programaOdi;
	private SubprogramaOdi subprogramaOdi;
	private UnidadOdi unidadOdi;
	private Conglomerado conglomerado;
	private Localizacion localizacion;	
	private ProyectoBanco proyectoBanco;	

	
	@RequestMapping("/aspectosGeneralesSnip04Listar")
	public ModelAndView aspectosGeneralesSnip04Listar(HttpServletRequest request, HttpServletResponse response) {
	
		if (log.isDebugEnabled()) log.debug("aspectosGeneralesSnip04Listar(HttpServletRequest,HttpServletResponse");
			
	    HttpSession session = request.getSession();		
		Map<String, Object> aspectosGeneralesSnip04Map = new HashMap<String, Object>();
		
		try{
			
		session.setAttribute("idProyecto", (String) request.getParameter("idProyecto"));
			
		
		funcionOdiService.listar(funcionOdi);
		List<FuncionOdi> funcionOdiList = funcionOdi.getResultList();

		programaOdiService.listar(programaOdi);
		List<FuncionOdi> programaOdiList = programaOdi.getResultList();
		
		subprogramaOdiService.listar(subprogramaOdi);
		List<FuncionOdi> subprogramaOdiList = subprogramaOdi.getResultList();
		
		unidadOdiService.listar(unidadOdi);
		List<FuncionOdi> unidadOdiList = unidadOdi.getResultList();
		
		localizacionService.listar(localizacion);
		List<Localizacion> localizacionList = localizacion.getResultList();
			
		aspectosGeneralesSnip04Map.put("funcionOdiList", funcionOdiList);		
		aspectosGeneralesSnip04Map.put("programaOdiList", programaOdiList);		
		aspectosGeneralesSnip04Map.put("subprogramaOdiList", subprogramaOdiList);		
		aspectosGeneralesSnip04Map.put("unidadOdiList", unidadOdiList);
		aspectosGeneralesSnip04Map.put("localizacionList", localizacionList);
		aspectosGeneralesSnip04Map.put("accion", (String) request.getParameter("acccion"));		
		aspectosGeneralesSnip04Map.put("idProyecto", (String) request.getParameter("idProyecto"));
		
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return new ModelAndView("frmAspectosGenerales","aspectosGeneralesSnip04Map",aspectosGeneralesSnip04Map);
	}
	
	
	@RequestMapping("/aspectosGeneralesSnip04Grabar")
	public ModelAndView aspectosGeneralesSnip04Grabar(HttpServletRequest request, HttpServletResponse response) {
		
		if (log.isDebugEnabled()) log.debug("aspectosGeneralesSnip04Grabar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
	    
		Map<String, Object> aspectosGeneralesSnip04Map = new HashMap<String, Object>();
		String viewName = "";
		
		funcionOdi = new FuncionOdi();
		programaOdi = new ProgramaOdi();
		subprogramaOdi = new SubprogramaOdi();
		unidadOdi = new UnidadOdi();
		conglomerado = new Conglomerado();
		proyectoBanco = new ProyectoBanco();
		
		try{
		
		if(session.getAttribute("proyecto") == null || session.getAttribute("proyecto") == ""){
			viewName = "errorPage";
		}else{	
			
			aspectosGeneralesSnip04Map.put("proyecto", session.getAttribute("proyecto"));
			aspectosGeneralesSnip04Map.put("version", session.getAttribute("version"));
			
			proyectoBanco.setProyecto(new BigDecimal(request.getParameter("txt_codigoProyectoBanco")));
			proyectoBanco.setNombreProy(request.getParameter("txt_nombreProyectoBanco"));
			proyectoBanco.setFuncionOdi(request.getParameter("sel_cargarFuncionOdi"));
			proyectoBanco.setProgramaOdi(request.getParameter("sel_cargarProgramaOdi"));
			proyectoBanco.setSubprogramaOdi(request.getParameter("sel_cargarSubProgramaOdi"));	
			proyectoBanco.setRespFormularUf(request.getParameter("txt_responsableFormulacion"));
			proyectoBanco.setRespNombreUf(request.getParameter("txt_responsableUnidadFormuladora"));
			proyectoBanco.setRespNombreUe(request.getParameter("txt_cargarResponsableEjecucion"));	
			proyectoBanco.setVersion(new BigDecimal(request.getParameter("hd_version")));
			//....
			
			proyectoBancoService.insertar(proyectoBanco);	
			viewName = "frmAspectosGenerales";	
			
		}
			
		
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return new ModelAndView(viewName,"aspectosGeneralesSnip04Map",aspectosGeneralesSnip04Map);
	}
	

	
	
}

